A network storage controller is a processing system that is used to store and retrieve data on behalf of one or more hosts on a network. A storage controller operates on behalf of one or more hosts to store and manage data in a set of mass storage devices, e.g., magnetic or optical storage-based disks, solid state devices, or tapes. Some storage controllers are designed to service file-level requests from hosts, as is commonly the case with file servers used in network attached storage (NAS) environments. Other storage controllers are designed to service block-level requests from hosts, as with storage controllers used in a storage area network (SAN) environment. Still other storage controllers are capable of servicing both file-level requests and block-level requests.
With the advent of solid state cache systems, and flash-based cache systems in particular, the size of cache memory that is utilized by a storage controller has grown relatively large, in many cases, into Terabytes. Furthermore, conventional storage systems are often configurable providing for a variety of cache memory sizes. Typically, the larger the cache size, the better the performance of the storage system. However, cache memory is expensive and performance benefits of additional cache memory can decrease considerably as the size of the cache memory increases, e.g., depending on the workload.
Currently, some storage systems offer the ability to simulate a specified cache size and gather limited predictive statistics for a particular simulated cache size. Unfortunately, the simulations can be extremely time consuming and must be run numerous times to determine predictive cache statistics for different cache sizes. Therefore, the problems of multiple configurations and excessive time consumption pose a significant challenge when determining an appropriate cache size for a storage system. Continuous efforts are being made for efficiently determining and using predictive cache statistics.